/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */

package estrutura;

import java.io.Serializable;
import javax.persistence.EmbeddedId;
import javax.persistence.Entity;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.Table;
import javax.xml.bind.annotation.XmlRootElement;

/**
 * Horário que possui uma turma de alguma disciplina.
 * 
 * @author Gustavo
 */
@Entity
@Table(name = "HORARIO")
@XmlRootElement
@NamedQueries({
    @NamedQuery(name = "Horario.findAll", query = "SELECT h FROM Horario h"),
    @NamedQuery(name = "Horario.findByPeriodo", query = "SELECT h FROM Horario h WHERE h.horarioPK.periodo = :periodo"),
    @NamedQuery(name = "Horario.findByDia", query = "SELECT h FROM Horario h WHERE h.horarioPK.dia = :dia"),
    @NamedQuery(name = "Horario.findByInicio", query = "SELECT h FROM Horario h WHERE h.horarioPK.inicio = :inicio"),
    @NamedQuery(name = "Horario.findByFim", query = "SELECT h FROM Horario h WHERE h.horarioPK.fim = :fim")})
public class Horario implements Serializable {
    private static final long serialVersionUID = 1L;
    /**
     * Chave primária de Horario.
     */
    @EmbeddedId
    protected HorarioPK horarioPK;
    
    /**
     * Construtor padrão.
     * Cria um objeto da classe Horario sem estabelecer a sua chave primária.
     */
    public Horario() {
    }

    /**
     * Construtor com chave primária.
     * Cria um objeto da classe Horario estabelencedo sua chave primária.
     * @param horarioPK Chave primária do objeto.
     */
    public Horario(HorarioPK horarioPK) {
        this.horarioPK = horarioPK;
    }

    /**
     * Construtor com atributos da chave.
     * Cria um objeto da classe Horario e da classe HorarioPK, passando os
     * parâmetros da chave primária para o construtor dela.
     * @param periodo Período (1 - para primeiro semestre; 2 - para o segundo
     * semestre).
     * @param dia Dia (1 - Domingo; 2 - Segunda-feira; 3 - Terça-feira;
     * 4 - Quarta-feira; 5 - Quinta-feira; 6 - Sexta-feira; 7 - Sábado).
     * @param inicio Início do horário de aula (inteiro no formato XXYY, onde XX
     * é um valor entre 00 e 23 e YY um valor entre 00 e 59. Exemplo: 2000
     * significa 20:00).
     * @param fim Término do horário de aula (inteiro no formato XXYY, onde XX
     * é um valor entre 00 e 23 e YY um valor entre 00 e 59. Exemplo: 2000
     * significa 20:00).
     */
    public Horario(int periodo, int dia, int inicio, int fim) {
        this.horarioPK = new HorarioPK(periodo, dia, inicio, fim);
    }

    /**
     * @return Retorna a chave primária do objeto.
     */
    public HorarioPK getHorarioPK() {
        return horarioPK;
    }

    /**
     * @param horarioPK Nova chave primária da entidade.
     */
    public void setHorarioPK(HorarioPK horarioPK) {
        this.horarioPK = horarioPK;
    }
    
    /**
     * @return Retorna um inteiro que representa o período do horário.
     *  (1 - para primeiro semestre; 2 - para o segundo semestre).
     */
    public int retornaperiodo() {
        return horarioPK.getPeriodo();
    }
    
    /**
     * @return Retorna um inteiro que representa o dia do horário.
     * (1 - Domingo; 2 - Segunda-feira; 3 - Terça-feira; 4 - Quarta-feira;
     * 5 - Quinta-feira; 6 - Sexta-feira; 7 - Sábado).
     */
    public int retornaDia() {
        return horarioPK.getDia();
    }
    
    /**
     * @return Retorna o horário que inicia a aula.
     * (inteiro no formato XXYY, onde XX é um valor entre 00 e 23 e YY um valor
     * entre 00 e 59. Exemplo: 2000 significa 20:00).
     */
    public int retornaInicio() {
        return horarioPK.getInicio();
    }
    
    /**
     * @return Retorna o horário de fim da aula.
     * (inteiro no formato XXYY, onde XX é um valor entre 00 e 23 e YY um valor
     * entre 00 e 59. Exemplo: 2000 significa 20:00).
     */
    public int retornaFim() {
        return horarioPK.getFim();
    }

    @Override
    public int hashCode() {
        int hash = 0;
        hash += (horarioPK != null ? horarioPK.hashCode() : 0);
        return hash;
    }

    @Override
    public boolean equals(Object object) {
        // TODO: Warning - this method won't work in the case the id fields are not set
        if (!(object instanceof Horario)) {
            return false;
        }
        Horario other = (Horario) object;
        return (this.horarioPK != null || other.horarioPK == null) && (this.horarioPK == null || this.horarioPK.equals(other.horarioPK));
    }

    @Override
    public String toString() {
        return "estrutura.Horario_1[ horarioPK=" + horarioPK + " ]";
    }    
}
